The debugging of software applications is a very critical activity. Generally, the debugging of any software application starts with the identification of errors that result in a malfunctioning thereof. A diagnostic analysis is carried out to determine the causes of these errors. The appropriate corrective actions are then taken to fix the errors (by either repairing them permanently or simply by-passing them temporarily).
Typically, the debugging leverages a tracing functionality of the software application. In this case, log information about the operations performed during the execution of the software application is saved into a log file. The analysis of this log information (in response to any errors) provides useful hints about the context in which the errors occurred. An example of a log file that is stored on web servers is disclosed in U.S. Patent Application No. 2005/0240620. Particularly, this document proposes a specific log file for voice-enabled web applications; the log file is based on the XML specification, so as to facilitate its analysis.
Debugging is one of the main activities during the development of any new software applications (in connection with their testing). However, debugging also continues after the software applications have been delivered. Indeed, the software applications are so complex, that is almost impossible to ensure that they work correctly in any production environments (especially when multiple software applications interact with them).
A problem is that the debugging of the software applications is sometimes very difficult in the production environment. A typical example is that of a software application with a client/server architecture, such as a web application. A web application includes a server component running on a server computer (or simply “server”), which is accessed by users of different client computers (or simply “clients”) through corresponding browsers. The web applications have become very popular in the last few years, due to the ubiquity of the browsers. Another reason for the widespread diffusion of the web applications is the possibility of maintaining them without the need for performing any action on the clients.
Typically, modern web applications also include client components (such as JavaScripts or applets), which are downloaded on each client whenever it is necessary. The operation is controlled by the browser on which these client components are executed (and then discarded). As a result, part of the processing is performed locally on the clients, without any interaction with the server. This improves the performance of the web applications, and strongly reduces the network traffic (for the communications between the clients and the server).
However, the more complex the client components of any web application, the more difficult is its debugging. Indeed, in this case the client components can perform a long series of operations locally (without any interaction with the server component). Therefore, whenever an error is detected on the server following its occurrence on the client, no information is available on the server about the operations that were performed by the client components.
In this context, it is very difficult (if not impossible) to implement any tracing of the web application on the client. Indeed, security constraints generally prevent the client components (running in the browser) from writing to the mass memory of the client. Therefore, it is not possible to save log information about the operations performed during the execution of the client components into any log file.
This has a detrimental impact on the quality and reliability of the web applications.